package com.haha.helloworld.event;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.haha.helloworld.R;

public class EventActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_event;
    private MyButton btn_my;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
        //注意看布局文件是使用的MyButton
        btn_my=(MyButton)findViewById(R.id.btn_my);
        //触摸监听，监听优于回调
        btn_my.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        Log.d("Listener","--onTouch--");
                        break;
                }
                return false;
            }
        });

        btn_event = (Button) findViewById(R.id.btn_event);
        //以下5种方式实现Onclick事件
        //优先级：即是程序由上自下，最后一个Click会实现（且布局文件中引用的方法是被认为最先使用的，最上方。有其他方法，布局方法就被覆盖）
        //1.内部类去实现(常用)
        btn_event.setOnClickListener(new OnClick());
        //2.匿名内部类实现(常用)
        btn_event.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("匿名内部类实现","click");
                Toast.makeText(EventActivity.this, "我被点击了", Toast.LENGTH_SHORT).show();
            }
        });
        //3.通过事件源所在的类实现(常用)
        btn_event.setOnClickListener(EventActivity.this);
        //4.通过外部类去实现
        btn_event.setOnClickListener(new MyClickListener(EventActivity.this));
    }

    //3.通过类实现OnclickListener接口实现
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_event:
                Log.d("通过类实现接口","click");
                Toast.makeText(EventActivity.this, "我被点击了", Toast.LENGTH_SHORT).show();
                break;
        }
    }

    //5.布局文件调用此方法
    public void myshow(View v){
        switch (v.getId()) {
            case R.id.btn_event:
                Log.d("布局文件","click");
                Toast.makeText(EventActivity.this, "我被点击了", Toast.LENGTH_SHORT).show();
                break;
        }
    }

    //自定义一个内部类
    class OnClick implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_event:
                    Log.d("内部类","click");
                    Toast.makeText(EventActivity.this, "我被点击了", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                Log.d("EventActivity","--onTouchEvent--");
                break;
        }
        //事件的冒泡机制：Mybutton里边的onTouchEvent被调用，那它的上一层的onTouchEvent也会被调用
        //返回的布尔值为false，就表示冒泡机制执行
        //返回的布尔值为true，就表示冒泡机制不执行
        return super.onTouchEvent(event);
    }
}